perm filename FFT2.F4[900,BGB] blob sn#129607 filedate 1974-11-12 generic text, type T, neo UTF8
00100	C	FORT, ONE DIMENSIONAL FINITE COMPLEX FOURIER TRANSFORM
00200	C
00300		SUBROUTINE FORT(A,M,S,IFS,IFERR)
04900	C
05000		DIMENSION A(1),S(1),K(14)
05500		IF(M)2,2,3
05600	    3	IF(M-13) 5,5,2
05700	    2	IFERR=1
05800	    1	RETURN
05900	    5	IFERR=0
06000		N=2**M
06100		IF(IABS(IFS)-1) 200,200,10
06200	C	WE ARE DOING TRANSFORM ONLY.  SEE IF PRECOMPUTED
06300	C	S  TABLE IS SUFFICIENTLY LARGE.
06400	   10	IF(N-NP)20,20,12
06500	   12	IFERR=1
06600		GO TO 200
06700	20	CALL BITREV(A,M)
09700
09710		CALL FFT(IFS)
17100	  160	GO TO 1
17200	C	RETURN
17300	C	MAKE TABEL OF S(J)=SIN(2*PI*J/NP),J=1,2,...,NT-1,NT=NP/4
17400	  200	NP=N
17500		MP=M
17600		NT=N/4
17700		MT=M-2
17701		N2=2*N
17703		NPL=2**MT
17710		FN=N
17720		FN=1.0/FN
17730		CALL FFTINT(A,S,M,NT,N,N2,FN,NPL)
17800		IF(MT) 260,260,205
17900	  205	THETA=0.7853981634
18000	C	THETA= PI/2**(L+1)     FOR L=1
18100	  210	JSTEP=NT
18200	C	JSTEP= 2** (MT-L+1)     FOR L=1
18300		JDTF=NT/2
18400	C	JDTF=  2**(MT-L)     FOR L=1
18500		S(JDTF)=SIN(THETA)
18600		IF(MT-2)260,220,220
18700	  220	DO 250 L=2,MT
18800		THETA=THETA/2.0
18900		JSTEP2=JSTEP
19000		JSTEP=JDTF
19100		JDTF=JDTF/2
19200		S(JDTF)=SIN(THETA)
19300		JC1=NT-JDTF
19400		S(JC1)=COS(THETA)
19500		JLAST=NT-JSTEP2
19600		IF(JLAST-JSTEP)250,230,230
19700	  230	DO 240 J=JSTEP,JLAST,JSTEP
19800		JC=NT-J
19900		JD=J+JDTF
20000	  240	S(JD)=S(J)*S(JC1)+S(JDTF)*S(JC)
20100	  250	CONTINUE
20200	  260	IF(IFS)20,1,20
20300		RETURN
20400		END